/*
 * Copyright (c) 2024-2025 LTC-CN. All rights reserved.
 * <p>
 * This file is part of the ltc-cn-springboot project.
 * <p>
 * ltc-cn-springboot is distributed under the terms of the MIT License.
 * For details, see the accompanying LICENSE file or visit:
 * <a href="https://www.ltc-cn.top/projects">...</a>
 */

package top.ltc_cn.springboot_tools.tools.passwordUtils;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

@Slf4j
@Component
public class Sm3Utils {

    private Sm3Utils() {} // 防止实例化

//    private static PasswordEncryptProperties passwordEncryptProperties;
//    private static ApplicationContext context;
//
//    @Override
//    public void setApplicationContext(ApplicationContext applicationContext) {
//        context = applicationContext;
//        passwordEncryptProperties = context.getBean(PasswordEncryptProperties.class);
//    }
//
//    public static String Sm3Encrypt(String content) {
//        if (passwordEncryptProperties == null) {
//            throw new IllegalStateException("PasswordEncryptProperties not initialized");
//        }
//        if (passwordEncryptProperties.isEnable()) {
//            if (passwordEncryptProperties.getKeyConfig().isEnable()){
//                return encryptByKey(passwordEncryptProperties.getKeyConfig().getKey(), content);
//            }
//            return Sm3EncryptText(content);
//        }
//        return "";
//    }
//
//    /**
//     * sm3加密，不可逆，但不使用key
//     * @param content
//     * @param again
//     * @return
//     */
//    public static String Sm3Encrypt(String content, boolean again) {
//        if (passwordEncryptProperties == null) {
//            throw new IllegalStateException("PasswordEncryptProperties not initialized");
//        }
//        if (passwordEncryptProperties.isEnable()) {
//            if (passwordEncryptProperties.getKeyConfig().isKeyCompatible()) { // 兼容无key版本
//                return Sm3EncryptText(content);
//            }
//            return Sm3Encrypt(content);
//        }
//        return "";
//    }
//
//    /**
//     * SM3加密，不可逆
//     * @param content  要加密的内容
//     * @return 加密结果
//     */
//    public static String Sm3EncryptText(String content) {
//        byte[] bytes = content.getBytes(StandardCharsets.UTF_8); // 得到字节数组
//        byte[] hash = hash(bytes); // 得到hash值
//        String sm3 = ByteUtils.toHexString(hash);
//        log.debug("sm3加密结果：{}", sm3);
//        return sm3;
//    }
//
//    /**
//     * sm3算法加密
//     * @param srcData 要hash的字节数组数据
//     * @return hash值
//     */
//    private static byte[] hash(byte[] srcData){
//        SM3Digest digest = new SM3Digest(); // 创建一个SM3摘要对象
//        digest.update(srcData,0,srcData.length); // 更新数据
//        byte[] bytes = new byte[digest.getDigestSize()]; // 创建一个字节数组，用于保存SM3摘要结果
//        digest.doFinal(bytes,0); // 完成计算并保存结果
//        return bytes;
//    }
//
//    /**
//     * sm3算法通过密钥进行加密，不可逆加密
//     * @param keyText 密钥字符串
//     * @param plainText 需加密的明文字符串
//     * @return 加密后固定长度64的16进制字符串
//     */
//    public static String encryptByKey(String keyText, String plainText) {
//        return ByteUtils.toHexString(encryptByKey(keyText.getBytes(StandardCharsets.UTF_8), plainText.getBytes(StandardCharsets.UTF_8)));
//    }
//
//    /**
//     * sm3算法通过密钥进行加密，不可逆加密
//     * @param keyByte 密钥数组
//     * @param plainByte 需加密的明文数组
//     * @return 加密后固定长度64的16进制数组
//     */
//    private static byte[] encryptByKey(byte[] keyByte, byte[] plainByte) {
//        KeyParameter keyParameter = new KeyParameter(keyByte);
//        SM3Digest sm3Digest = new SM3Digest();
//        HMac hMac = new HMac(sm3Digest);
//        hMac.init(keyParameter);
//        hMac.update(plainByte, 0, plainByte.length);
//        byte[] result = new byte[hMac.getMacSize()];
//        hMac.doFinal(result, 0);
//        return result;
//    }

    // SM3哈希
    public static String sm3Hash(String input) {
        return cn.hutool.crypto.digest.SM3.create().digestHex(input);
    }
}
